package com.note.app.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.note.app.dto.TagDTO;
import com.note.common.domain.Tag;

import java.util.List;

/**
 * 标签服务接口
 */
public interface TagService {

    /**
     * 创建标签
     *
     * @param userId 用户ID
     * @param name 标签名称
     * @return 创建的标签ID
     */
    Long createTag(Long userId, String name);

    /**
     * 批量获取或创建标签
     *
     * @param userId 用户ID
     * @param tagNames 标签名称列表
     * @return 标签ID列表
     */
    List<Long> getOrCreateTags(Long userId, List<String> tagNames);

    /**
     * 更新标签
     *
     * @param userId 用户ID
     * @param tagId 标签ID
     * @param name 新标签名称
     * @return 是否更新成功
     */
    boolean updateTag(Long userId, Long tagId, String name);

    /**
     * 删除标签
     *
     * @param userId 用户ID
     * @param tagId 标签ID
     * @return 是否删除成功
     */
    boolean deleteTag(Long userId, Long tagId);

    /**
     * 分页查询用户标签
     *
     * @param userId 用户ID
     * @param current 当前页
     * @param size 每页大小
     * @return 标签分页结果
     */
    Page<TagDTO> getUserTags(Long userId, long current, long size);

    /**
     * 获取所有用户标签
     *
     * @param userId 用户ID
     * @return 用户所有标签列表
     */
    List<TagDTO> getAllUserTags(Long userId);

    /**
     * 根据笔记ID获取标签
     *
     * @param noteId 笔记ID
     * @return 笔记关联的标签列表
     */
    List<TagDTO> getTagsByNoteId(Long noteId);

    /**
     * 标签关联笔记
     *
     * @param noteId 笔记ID
     * @param tagIds 标签ID列表
     * @return 关联成功的标签数量
     */
    int associateTagsWithNote(Long noteId, List<Long> tagIds);

    /**
     * 删除笔记的标签关联
     *
     * @param noteId 笔记ID
     * @return 是否删除成功
     */
    boolean removeTagsFromNote(Long noteId);
}